package com.the.ui.widge.slidecard;//  ┏┓　　　┏┓
//┏┛┻━━━┛┻┓
//┃　　　　　　　┃
//┃　　　━　　　┃
//┃　┳┛　┗┳　┃
//┃　　　　　　　┃
//┃　　　┻　　　┃
//┃　　　　　　　┃
//┗━┓　　　┏━┛
//    ┃　　　┃                  神兽保佑
//    ┃　　　┃                  永无BUG！
//    ┃　　　┗━━━┓
//    ┃　　　　　　　┣┓
//    ┃　　　　　　　┏┛
//    ┗┓┓┏━┳┓┏┛
//      ┃┫┫　┃┫┫
//      ┗┻┛　┗┻┛

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;

import androidx.recyclerview.widget.RecyclerView;

import com.qmuiteam.qmui.util.QMUIDisplayHelper;

/**
 * @author The one
 * @date 2021-11-24 15:21
 * @describe 自定义LayoutManager - 仿探探效果
 * @email 625805189@qq.com
 * @remark
 */
public class SlideCardLayoutManager extends RecyclerView.LayoutManager {

    public static final int MAX_SHOW_COUNT = 4;
    /**
     * 缩放大小
     */
    public static float SCALE_GAP;
    /**
     * Y方向平移量
     */
    public static int TRANS_Y_GAP;

    public SlideCardLayoutManager(Context context) {
        SCALE_GAP = 0.08f;
        TRANS_Y_GAP = QMUIDisplayHelper.dp2px(context, 20);
    }

    @Override
    public RecyclerView.LayoutParams generateDefaultLayoutParams() {
        return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);
    }

    /**
     * 例：
     * 现在总共8张图片，编号 0...8
     * 规定了显示4张,那么最底部的编号lastPosition是4
     * 由于后摆放的在上面，所以第0张需要最后一个添加
     * for(int i = lastPosition -1; i > 0 ; i--){
     * 第4张
     * ...
     * 第1张
     * }
     * 最后根据位置缩放和平移
     *
     * @param recycler
     * @param state
     */
    @Override
    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
        // 回收、复用
        detachAndScrapAttachedViews(recycler);
        // 总共的item个数：8个
        int itemCount = getItemCount();
        // 默认是最大可显示个数
        int lastPosition = MAX_SHOW_COUNT;
        // 如果比可显示小，以加载总个数为准
        if (itemCount < MAX_SHOW_COUNT) {
            lastPosition = itemCount;
        }
        // 遍历
        for (int p = lastPosition -1 ; p >= 0; p--) {
            // 根据位置获取View
            View view = recycler.getViewForPosition(p);
            // 添加
            addView(view);
            // onMeasure
            measureChildWithMargins(view, 0, 0);

            // View的宽高
            int viewWidth = getDecoratedMeasuredWidth(view);
            int viewHeight = getDecoratedMeasuredHeight(view);

            // 一半的宽间距
            int halfWidthSpace = (getWidth() - viewWidth) / 2;
            // 半的高间距
            int halfHeightSpace = (getHeight() - viewHeight) / 2;

            // onLayout 居中显示
            // left = 一半的宽间距  top = 一半的高间距  right = 一半的宽间距 + view的宽度 bottom = 一半的高间距 + view的高
            layoutDecoratedWithMargins(view, halfWidthSpace, halfHeightSpace,
                    viewWidth + halfWidthSpace,
                    viewHeight + halfHeightSpace);

            // 根据位置，得到一个缩放和平移的等级
            int level = p;

            // 最上面的那张不用处理
            if (level > 0) {
                // 最后一张和倒数第二张一样
                if (level == MAX_SHOW_COUNT - 1) {
                    level--;
                }
                // 我们定义的 TRANS_Y_GAP = 20dp, 也就是往下（Y轴) 偏移 20dp * level
                // 第二张 20 ， 第三张 40 ，第四张 = 第三张 = 40
                view.setTranslationY(TRANS_Y_GAP * level);
                // 然后缩小 1 - 0.08*level ， 这个 SCALE_GAP 越到，缩小的越多
                // 第二张 1 - 0.08*2 = 0.84
                // 第三张 1 - 0.08*3 = 0.76
                // 第四张 = 第三张 = 0.76
                float scale = 1 - SCALE_GAP * level;
                view.setScaleX(scale);
                view.setScaleY(scale);
            }
        }

    }

}
